Conventional central processing units (CPUs) are configured with a small number of cores that are allocated to perform operations for different processes using a time slice technique. For example, Intel® Core iX (e.g., i3, i5, i7) processors may include up to 4 cores with each core having resources for two threads to be loaded into the hardware resources at a time (e.g., each core includes two sets of program counters). During each clock cycle, each core may execute an instruction from either of the two threads currently loaded in the hardware resources for the core. An operating system may also make scheduling decisions that enable a thread stored in memory to be loaded into the hardware resources of the core, potentially evicting a currently loaded thread and storing that thread into memory to be restored at a later point in time.
In contrast to the conventional CPUs, graphics processing units (GPUs) are implemented with a large number of cores arranged in a highly parallel architecture. These circuits are typically specialized to process large blocks of data in parallel, especially graphics data. Conventional GPUs are typically configured to process a large number of threads related to a particular context. The GPU may be allocated to a graphics context where all of the GPU resources are configured to process a large number of threads related to graphics data. Alternately, the GPU may be allocated to a different context, such as a compute context, where all of the GPU resources are configured to process a large number of threads related to compute data. As used herein, a graphics context comprises the state related to executing instructions on the GPU for the processing of graphics data such as rendering 3D model data to generate 2D image data, processing textures, generating soft shadows, etc. A compute context comprises the state related to executing instructions on the GPU to perform general parallel computations such as physics calculations used in animations or large data set analysis. Conventional GPUs can be configured to process either a graphics context or a compute context, but not both, and the operating system can switch the GPU from one context to another dynamically during execution in order to process graphics tasks or compute tasks.
Recently, some parallel processor architectures have been implemented as hybrid systems. In other words, the parallel processor includes a number of cores, a first portion of which is allocated to process compute tasks and a second portion of which is allocated to process graphics tasks. However, this allocation is fixed such that all of the resources of the parallel processor cannot be allocated to either compute tasks or graphics tasks, and, when only one type of task is being executed, at least one portion of the parallel processor is idle. Such a system is not efficient at handling any type of context that needs to be processed. Thus there is a need for addressing these issues and/or other issues associated with the prior art.